﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Insifo.WE;
using System.Text.RegularExpressions;
using System.Collections.Specialized;
using System.IO;
using System.Text;
using System.Collections;

public partial class proProcesarImportacion : ObjectPage
{
    #region CONSTANTES

    private const string NOMBRE_PAQUETE = "pkgMAIN_001_ProcesoImportacion";
    private const string RUTA_LISTA = "~/pro/proCompaniaImportacionListar.aspx";
    public delegate void MethodInvoker();

    #endregion

    #region PROPIEDADES

    public Dictionary<int, bool> ListaAImportar
    {
        set { ViewState["ListaAImportar"] = value; }
        get
        {
            if (ViewState["ListaAImportar"] == null)
                ViewState["ListaAImportar"] = new Dictionary<int, bool>();
            return (Dictionary<int, bool>)ViewState["ListaAImportar"];
        }
    }

    #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Insertar Tabla
        if (hfInsercion.Value == "S")
        {
            hfInsercion.Value = "N";
            InsertarTabla();
            ListarCampoListView();
            ListarMaestroListView();
            JavascriptRefrescarGrillas();
        }

        //Tab de Importacion y A Importar
        if (hfTabSeleccion.Value == "0" || hfTabSeleccion.Value == "3")
        {
            if (IsPostBack)
            {
                ListarImportacionListView();
                ListarAImportarListView();
            }
        }

        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuEditarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {
            Cargar();
        }

        Util.RegistrarAutoWidth(divGrvImportacion);
        Util.RegistrarAutoWidth(divGrvAImportar);
        ScriptManager.RegisterStartupScript(this, this.GetType(), "chkRelacionar", "chkRelacionar();", true);

        grvImportacion.RowDataBound += new GridViewRowEventHandler(grvImportacion_RowDataBound);
        grvAImportar.RowDataBound += new GridViewRowEventHandler(grvAImportar_RowDataBound);

    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Aceptar":
                ActualizarImportacion();
                JavascriptRefrescarGrillas();
                break;
            case "Cancelar":
                Salir();
                break;
        }
    }

    protected void ddlTablas_SelectedIndexChanged(object sender, EventArgs e)
    {
        ListarCampoListView();
        ListarMaestroListView();
    }

    protected void btnImportar_Click(object sender, ImageClickEventArgs e)
    {
        ImportarExcel();
        JavascriptRefrescarGrillas();
    }

    protected void ibtBuscar_Click(object sender, ImageClickEventArgs e)
    {
        ucpagListaImportacion.NumeroPagina = 1;
        ListarImportacionListView();
    }

    protected void ibtBuscarAImportar_Click(object sender, ImageClickEventArgs e)
    {
        ucpagListaAImportar.NumeroPagina = 1;
        EstablecerSeleccionListaAImportar();
        ListarAImportarListView();
    }

    protected void btnCargarColumnaFiltro_Click(object sender, EventArgs e)
    {
        ddlColumnaFiltro.ClearSelection();
        ddlColumnaFiltro.Items.Clear();

        //Se obtiene el detalle del DropDownList
        if (!string.IsNullOrEmpty(ddlColumna.SelectedValue))
        {
            string[] strValor = ddlColumna.SelectedValue.Split('|');
            DataView dvColumna = ListarImportacionTabla(Constantes.PARAMETRO_IMPORTACION, strValor[0]).DefaultView;
            dvColumna.Sort = "Descripcion ASC";
            Util.loadCombo(ddlColumnaFiltro, dvColumna.ToTable(), "Descripcion", "Id");

            DataView dvImportacionCampo = ListarImportacionCampo(Constantes.PARAMETRO_IMPORTACION, strValor[0]).DefaultView;
            dvImportacionCampo.Sort = "Descripcion DESC";
            for (int i = 0; i < dvImportacionCampo.Count; i++)
            {
                ddlColumnaFiltro.Items.Insert(0, new ListItem(dvImportacionCampo[i]["Descripcion"].ToString(), string.Format("IC_{0}", i)));
                ddlColumnaFiltro.Items[0].Attributes["style"] = "color:red";
            }
        }
        ddlColumnaFiltro.Items.Insert(0, new ListItem(string.Format("----{0}----", Resources.resDiccionario.Todos), string.Empty));
    }

    protected void btnCargarColumnaFiltroAImportar_Click(object sender, EventArgs e)
    {
        ddlColumnaFiltroAImportar.ClearSelection();
        ddlColumnaFiltroAImportar.Items.Clear();

        //Se obtiene el detalle del DropDownList
        if (!string.IsNullOrEmpty(ddlColumnaAImportar.SelectedValue))
        {
            string[] strValor = ddlColumnaAImportar.SelectedValue.Split('|');
            DataView dvColumna = ListarImportacionTabla(Constantes.PARAMETRO_IMPORTACION, strValor[0]).DefaultView;
            dvColumna.Sort = "Descripcion ASC";
            Util.loadCombo(ddlColumnaFiltroAImportar, dvColumna.ToTable(), "Descripcion", "Id");

            DataView dvImportacionCampo = ListarImportacionCampo(Constantes.PARAMETRO_IMPORTACION, strValor[0]).DefaultView;
            dvImportacionCampo.Sort = "Descripcion DESC";
            for (int i = 0; i < dvImportacionCampo.Count; i++)
            {
                ddlColumnaFiltroAImportar.Items.Insert(0, new ListItem(dvImportacionCampo[i]["Descripcion"].ToString(), string.Format("IC_{0}", i)));
                ddlColumnaFiltroAImportar.Items[0].Attributes["style"] = "color:red";
            }
        }

        ddlColumnaFiltroAImportar.Items.Insert(0, new ListItem(string.Format("----{0}----", Resources.resDiccionario.Todos), string.Empty));
    }

    protected void btnAImportar_Click(object sender, EventArgs e)
    {
        EstablecerSeleccionListaAImportar();
        if (rbPorRegistro.Checked)
            InsertarAImportarRegistro();
        else
            InsertarAImportar();
        ListaAImportar.Clear();
        JavascriptRefrescarGrillas();
    }

    protected void ucpagListaImportacion_CambioPagina(object sender, EventArgs e)
    {
        ListarImportacionListView();
    }

    protected void ucpagListaAImportar_CambioPagina(object sender, EventArgs e)
    {
        EstablecerSeleccionListaAImportar();
        ListarAImportarListView();
    }

    protected void btnRefrescarGrillas_Click(object sender, EventArgs e)
    {
        EstablecerSeleccionListaAImportar();
        ListarImportacionListView();
        ListarAImportarListView();
    }

    protected void ibtnProcesar_Click(object sender, ImageClickEventArgs e)
    {
        string strAccion = string.Empty;
        string strParametro = string.Empty;
        int lnIdProceso = 0;

        int.TryParse(hfIdProceso.Value, out lnIdProceso);
        WCProceso.BEProceso obe = ObtenerProceso(new WCProceso.BEProceso { IdProceso = lnIdProceso });
        hfEstadoEjecutar.Value = obe.EstadoEjecucion;

        if (hfEstadoEjecutar.Value == "PRO")
        {
            Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgAlertaAdmProcesando));
            return;
        }
        else
        {
            hfEstadoEjecutar.Value = "PRO";
        }

        int.TryParse(hfIdProceso.Value, out lnIdProceso);
        if (!EnviarParametros())
        {
            return;
        }

        hfEjecutar.Value = "1";
        MethodInvoker simpleDelegate = new MethodInvoker(ProcesarPaquete);
        simpleDelegate.BeginInvoke(null, null);
    }

    protected void grvImportacion_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            GridView grv = (GridView)sender;
            bool blnKey = false;
            foreach (string strKey in grv.DataKeyNames)
            {
                if (string.IsNullOrEmpty(grv.DataKeys[e.Row.RowIndex][strKey].ToString()))
                {
                    blnKey = true;
                    break;
                }
            }

            if (blnKey)
            {
                e.Row.Style[HtmlTextWriterStyle.BackgroundColor] = "#EBEBEB";
                e.Row.Attributes["disabled"] = "true";
            }
        }
    }

    protected void grvAImportar_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            GridView grv = (GridView)sender;
            bool blnKey = false;
            foreach (string strKey in grv.DataKeyNames)
            {
                if (string.IsNullOrEmpty(grv.DataKeys[e.Row.RowIndex][strKey].ToString()))
                {
                    blnKey = true;
                    break;
                }
            }

            if (blnKey)
            {
                CheckBox chkSeleccionRegistro = (CheckBox)e.Row.FindControl("chkSeleccionRegistro");
                chkSeleccionRegistro.Checked = false;
                e.Row.Style[HtmlTextWriterStyle.BackgroundColor] = "#EBEBEB";
                e.Row.Attributes["disabled"] = "true";
            }
        }
    }
    #endregion

    #region METODOS

    protected void Cargar()
    {
        string strAccion = Request.QueryString["a"];   //a: N-Nuevo, e-Editar, v-Ver

        //Titulo
        Master.SubTitulo.Text = Resources.resDiccionario.Editar;
        Master.MenuAplicar.Visible = false;
        Master.MenuAceptar.OnClientClick = "javascript:return fnGuardar();";

        ////Tabs
        lnkImportacion.HRef = string.Format("#{0}", tabImportacion.ClientID);
        lnkMaestro.HRef = string.Format("#{0}", tabMaestro.ClientID);
        lnkAImportar.HRef = string.Format("#{0}", tabAImportar.ClientID);
        lnkLog.HRef = string.Format("#{0}", divLog.ClientID);

        hfEjecutar.Value = "1";
        hfIdProceso.Value = Constantes.PROCESO_IMPORTACION.ToString();
        DataTable dtColumnas = ListarParametroDetalle(Constantes.IDCOMPANIA_DEFAULT, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_IMPORTACION);
        dtColumnas.Columns.Add(new DataColumn("ValorTipo", typeof(String), "ParametroDetalle + '|' + ValorTexto1 + '|' + ValorTexto2"));

        DataView dvColumnas = dtColumnas.DefaultView;
        dvColumnas.RowFilter = "ValorTexto6 = 'N'";
        dvColumnas.Sort = "ValorNumero ASC";
        Util.loadComboAndItem(ddlColumna, dvColumnas.ToTable(), "Descripcion", "ValorTipo", string.Format("--{0}--", Resources.resDiccionario.Seleccione), string.Empty);
        Util.loadComboAndItem(ddlColumnaAImportar, dvColumnas.ToTable(), "Descripcion", "ValorTipo", string.Format("--{0}--", Resources.resDiccionario.Seleccione), string.Empty);

        ListarTablaDropDownList();
        ListarCampoListView();
        ListarMaestroListView();
    }

    protected void Salir()
    {
        Util.Redireciona(RUTA_LISTA, "?a=l", true);
    }

    private DataTable ObtenerDatosExcel()
    {
        string strPath = string.Empty;
        DataTable dtExcel = null;

        if (fuImportacion.HasFile)
        {
            try
            {
                strPath = string.Concat(Server.MapPath("~/log/" + fuImportacion.FileName));
                fuImportacion.SaveAs(strPath);
                UtilExcel utilExcel = new UtilExcel();
                dtExcel = utilExcel.ImportarExcel(strPath);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (!string.IsNullOrEmpty(strPath))
                    File.Delete(strPath);
            }
        }

        return dtExcel;
    }

    private List<WCImportacion.BEImportacion> ValidarImportacion(DataTable dtExcel)
    {
        WCImportacion.BEImportacion beImportacion = null;
        DateTime dtFecha;
        List<WCImportacion.BEImportacion> lstImportacion = new List<WCImportacion.BEImportacion>();
        for (int i = 0; i < dtExcel.Rows.Count; i++)
        {
            foreach (DataColumn colRegistro in dtExcel.Columns)
            {
                beImportacion = new WCImportacion.BEImportacion();
                beImportacion.IdRegistro = i + 1;
                //beImportacion.IdCompania = int.Parse(hfIdCompania.Value);
                beImportacion.Campo = colRegistro.ColumnName;
                if (DateTime.TryParse(dtExcel.Rows[i][colRegistro.ColumnName].ToString(), out dtFecha))
                    beImportacion.Fecha = dtFecha;
                else
                    beImportacion.Texto = dtExcel.Rows[i][colRegistro.ColumnName].ToString();
                beImportacion.Estado = Constantes.ESTADO_ACTIVO;
                beImportacion.UsuarioCreacion = UsuarioSistema.CodigoUsuario;
                beImportacion.UsuarioModificacion = UsuarioSistema.CodigoUsuario;

                lstImportacion.Add(beImportacion);
            }
        }
        return lstImportacion;
    }

    private void ImportarExcel()
    {
        WCImportacion.BEImportacion beCompania = new WCImportacion.BEImportacion();
        beCompania.Importaciones = ValidarImportacion(ObtenerDatosExcel()).ToArray();
        if (beCompania.Importaciones.Length > 0)
            InsertarImportacion(beCompania);
    }

    private void ListarImportacionListView()
    {
        grvImportacion.Columns.Clear();
        grvImportacion.EnableViewState = false;

        string strAccion = hfAccion.Value;
        DataView dvColumnas = ListarParametroDetalle(Constantes.IDCOMPANIA_DEFAULT, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_IMPORTACION).DefaultView;
        dvColumnas.RowFilter = "ValorTexto6 = 'K'";
        dvColumnas.Sort = "ValorNumero ASC";

        string[] strKey = new string[dvColumnas.Count + 1];

        for (int i = 0; i < dvColumnas.Count; i++)
        {
            strKey[i] = dvColumnas[i]["ParametroDetalle"].ToString();
        }

        strKey[dvColumnas.Count] = "IdRegistro";
        dvColumnas.RowFilter = "ValorTexto6 = 'N'";
        dvColumnas.Sort = "ValorNumero ASC";

        // grvImportacion.DataKeyNames = new string[] { "IdRegistro" };
        grvImportacion.DataKeyNames = strKey;
        grvImportacion.Width = Unit.Percentage(100);
        grvImportacion.CssClass = "lista";
        grvImportacion.GridLines = GridLines.None;
        grvImportacion.EmptyDataText = Resources.resDiccionario.ImportacionMensaje;
        grvImportacion.AutoGenerateColumns = false;

        TemplateField tfColumna = null;
        tfColumna = new TemplateField();
        tfColumna.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
        tfColumna.HeaderText = Resources.resDiccionario.Acciones;
        tfColumna.ItemTemplate = new GridViewImageButtonItemTemplate("IdRegistro", "~/img/ico_trash.png", Resources.resDiccionario.Eliminar, false);
        tfColumna.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        grvImportacion.Columns.Add(tfColumna);


        DataView dtDropDownList = null;

        foreach (DataRowView rowDetalle in dvColumnas)
        {
            if (rowDetalle["ValorTexto1"].ToString() == "T")
            {
                //Columnas con Textbox
                tfColumna = new TemplateField();
                tfColumna.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                tfColumna.HeaderText = HttpUtility.HtmlDecode(rowDetalle["Descripcion"].ToString());

                tfColumna.ItemTemplate = new GridViewTextBoxItemTemplate(rowDetalle["ParametroDetalle"].ToString(), rowDetalle["ValorTexto2"].ToString(), false);
                tfColumna.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                grvImportacion.Columns.Add(tfColumna);
            }
            else if (rowDetalle["ValorTexto1"].ToString() == "D")
            {
                //Se obtiene el detalle del DropDownList
                dtDropDownList = ListarImportacionTabla(Constantes.PARAMETRO_IMPORTACION, rowDetalle["ParametroDetalle"].ToString()).DefaultView;
                dtDropDownList.Sort = "Descripcion ASC";

                //Se crea la columna
                tfColumna = new TemplateField();
                tfColumna.HeaderText = HttpUtility.HtmlDecode(rowDetalle["Descripcion"].ToString());
                tfColumna.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                tfColumna.ItemTemplate = new GridViewDropDownListItemTemplate(rowDetalle["ParametroDetalle"].ToString(), "Id", "Descripcion", dtDropDownList.ToTable(), true);

                grvImportacion.Columns.Add(tfColumna);
            }
        }

        int intTotalFilas = 0, intFilasXPagina = 0;
        WCImportacion.BEImportacion pbe = new WCImportacion.BEImportacion();

        if (!string.IsNullOrEmpty(ddlColumna.SelectedValue))
        {
            string[] strValor = ddlColumna.SelectedValue.Split('|');
            pbe.Campo = strValor[0];
            if (strValor[1] == "D")
            {
                if (ddlColumnaFiltro.SelectedValue.StartsWith("IC_"))
                    pbe.Texto = ddlColumnaFiltro.SelectedItem.Text;
                else
                    pbe.Valor = ddlColumnaFiltro.SelectedValue;
            }
            else
            {
                if (strValor[2] == "F")
                {
                    DateTime? dtFecha = null;
                    try
                    {
                        dtFecha = DateTime.Parse(txtColumnaFiltro.Text);
                    }
                    catch (Exception) { }
                    pbe.Fecha = dtFecha;

                }
                else
                    pbe.Texto = txtColumnaFiltro.Text;
            }
        }
        pbe.Pagina = ucpagListaImportacion.NumeroPagina;

        DataTable dt = CrearDataTableImportacion(pbe);
        grvImportacion.DataSource = dt;
        grvImportacion.DataBind();

        if (dt.Rows.Count > 0)
        {
            intFilasXPagina = Convert.ToInt32(dt.Rows[0]["FilasXPagina"]);
            intTotalFilas = Convert.ToInt32(dt.Rows[0]["TotalFilas"]);
        }
        ucpagListaImportacion.TotalRegistros = intTotalFilas;
        ucpagListaImportacion.RegistrosPorPagina = intFilasXPagina;
        ucpagListaImportacion.EnlazarPaginador();
    }

    private void ListarAImportarListView()
    {
        grvAImportar.Columns.Clear();
        string strAccion = hfAccion.Value;

        DataView dvColumnas = ListarParametroDetalle(Constantes.IDCOMPANIA_DEFAULT, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_IMPORTACION).DefaultView;
        dvColumnas.RowFilter = "ValorTexto6 = 'K'";
        dvColumnas.Sort = "ValorNumero ASC";

        string[] strKey = new string[dvColumnas.Count + 1];

        for (int i = 0; i < dvColumnas.Count; i++)
        {
            strKey[i] = dvColumnas[i]["ParametroDetalle"].ToString();
        }

        strKey[dvColumnas.Count] = "IdRegistro";
        dvColumnas.RowFilter = "ValorTexto6 = 'N'";
        dvColumnas.Sort = "ValorNumero ASC";

        //grvAImportar.DataKeyNames = new string[] { "IdRegistro" };
        grvAImportar.DataKeyNames = strKey;
        grvAImportar.EmptyDataText = Resources.resDiccionario.AImportarSinRegistros;
        grvAImportar.Width = Unit.Percentage(100);
        grvAImportar.CssClass = "lista";
        grvAImportar.GridLines = GridLines.None;
        grvAImportar.AutoGenerateColumns = false;

        TemplateField tfColumna = null;
        tfColumna = new TemplateField();
        tfColumna.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
        tfColumna.HeaderText = Resources.resDiccionario.Acciones;
        tfColumna.ItemTemplate = new GridViewCheckBoxItemTemplate("SeleccionRegistro", false);
        tfColumna.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        grvAImportar.Columns.Add(tfColumna);

        DataView dtDropDownList = null;

        foreach (DataRowView rowDetalle in dvColumnas)
        {
            if (rowDetalle["ValorTexto1"].ToString() == "T")
            {
                //Columnas con Textbox
                tfColumna = new TemplateField();
                tfColumna.ControlStyle.Width = Unit.Pixel(100);

                tfColumna.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                tfColumna.HeaderText = HttpUtility.HtmlDecode(rowDetalle["Descripcion"].ToString());

                tfColumna.ItemTemplate = new GridViewLabelItemTemplate(rowDetalle["ParametroDetalle"].ToString(), rowDetalle["ValorTexto2"].ToString(), false);
                grvAImportar.Columns.Add(tfColumna);
            }
            else if (rowDetalle["ValorTexto1"].ToString() == "D")
            {
                //Se obtiene el detalle del DropDownList
                dtDropDownList = ListarImportacionTabla(Constantes.PARAMETRO_IMPORTACION, rowDetalle["ParametroDetalle"].ToString()).DefaultView;
                dtDropDownList.Sort = "Descripcion ASC";

                //Se crea la columna
                tfColumna = new TemplateField();
                tfColumna.ControlStyle.Width = Unit.Pixel(100);
                tfColumna.HeaderText = HttpUtility.HtmlDecode(rowDetalle["Descripcion"].ToString());
                tfColumna.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                tfColumna.ItemTemplate = new GridViewLabelListItemTemplate(rowDetalle["ParametroDetalle"].ToString(), "Id", "Descripcion", dtDropDownList.ToTable(), true);

                grvAImportar.Columns.Add(tfColumna);
            }
        }

        int intTotalFilas = 0, intFilasXPagina = 0;
        WCImportacion.BEImportacion pbe = new WCImportacion.BEImportacion();

        if (!string.IsNullOrEmpty(ddlColumnaAImportar.SelectedValue))
        {
            string[] strValor = ddlColumnaAImportar.SelectedValue.Split('|');
            pbe.Campo = strValor[0];
            if (strValor[1] == "D")
            {
                if (ddlColumnaFiltroAImportar.SelectedValue.StartsWith("IC_"))
                    pbe.Texto = ddlColumnaFiltroAImportar.SelectedItem.Text;
                else
                    pbe.Valor = ddlColumnaFiltroAImportar.SelectedValue;
            }
            else
            {
                if (strValor[2] == "F")
                {
                    DateTime? dtFecha = null;
                    try
                    {
                        dtFecha = DateTime.Parse(txtColumnaFiltroAImportar.Text);
                    }
                    catch (Exception) { }
                    pbe.Fecha = dtFecha;

                }
                else
                    pbe.Texto = txtColumnaFiltroAImportar.Text;
            }
        }
        pbe.Pagina = ucpagListaAImportar.NumeroPagina;

        DataTable dt = CrearDataTableImportacion(pbe);
        dt.Columns.Add("SeleccionRegistro", Type.GetType("System.Boolean"));

        //Establecer los seleccionados
        foreach (DataRow drAImportar in dt.Rows)
        {
            int intKey = int.Parse(drAImportar["IdRegistro"].ToString());
            drAImportar["SeleccionRegistro"] = false;
            if (ListaAImportar.ContainsKey(intKey))
            {
                bool blnValor = ListaAImportar[intKey];
                drAImportar["SeleccionRegistro"] = blnValor;
            }
        }

        grvAImportar.DataSource = dt;
        grvAImportar.DataBind();

        if (dt.Rows.Count > 0)
        {
            intFilasXPagina = Convert.ToInt32(dt.Rows[0]["FilasXPagina"]);
            intTotalFilas = Convert.ToInt32(dt.Rows[0]["TotalFilas"]);
        }
        ucpagListaAImportar.TotalRegistros = intTotalFilas;
        ucpagListaAImportar.RegistrosPorPagina = intFilasXPagina;
        ucpagListaAImportar.EnlazarPaginador();
    }

    private void ListarTablaDropDownList()
    {
        string strParametro = Constantes.PARAMETRO_IMPORTACION;
        DataView dvTablas = ListarParametroDetalle(Constantes.IDCOMPANIA_DEFAULT, UsuarioSistema.IdAplicacion, strParametro).DefaultView;
        dvTablas.RowFilter = "ValorTexto2 = 'M'";
        Util.loadCombo(ddlTablas, dvTablas.ToTable(), "Descripcion", "ParametroDetalle");
    }

    private void ListarCampoListView()
    {
        string strParametroDetalle = ddlTablas.SelectedValue;
        string strParametro = Constantes.PARAMETRO_IMPORTACION;
        lvTablas.DataSource = ListarImportacionCampo(strParametro, strParametroDetalle);
        lvTablas.DataBind();

        lblTotalRegistroTablas.Text = string.Format("{0} : {1}", Resources.resDiccionario.TotalRegistro, lvTablas.Items.Count.ToString());
    }

    private void ListarMaestroListView()
    {
        string strParametroDetalle = ddlTablas.SelectedValue;
        string strParametro = Constantes.PARAMETRO_IMPORTACION;
        lvMaestro.DataSource = ListarImportacionMaestro(strParametro, strParametroDetalle);
        lvMaestro.DataBind();

        lblTotalRegistroMaestro.Text = string.Format("{0} : {1}", Resources.resDiccionario.TotalRegistro, lvMaestro.Items.Count.ToString());
    }

    private DataTable CrearDataTableImportacion(WCImportacion.BEImportacion pbe)
    {
        //Estructura de la tabla
        DataView dvEstructura = ListarParametroDetalle(Constantes.IDAPLICACION_SYSTEM, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_IMPORTACION).DefaultView;
        dvEstructura.Sort = "ValorNumero ASC";

        DataTable dtColumnas = new DataTable();
        dtColumnas.Columns.Add("IdRegistro");
        foreach (DataRowView item in dvEstructura)
            dtColumnas.Columns.Add(item["ParametroDetalle"].ToString());

        dtColumnas.Columns.Add("FilasXPagina", Type.GetType("System.Int32"));
        dtColumnas.Columns.Add("TotalFilas", Type.GetType("System.Int32"));

        //Imformacion de la Importacion
        DataView dvImportacion = ListarImportacion(pbe).DefaultView;
        dvImportacion.Sort = "IdRegistro ASC";

        string strTexto = string.Empty;
        DataRow rowRegistro = null;
        DataTable dtCantidadRegistros = dvImportacion.ToTable(true, "IdRegistro");
        foreach (DataRow intIdRegistro in dtCantidadRegistros.Rows)
        {
            dvImportacion.RowFilter = string.Format("IdRegistro = '{0}'", intIdRegistro["IdRegistro"]);
            rowRegistro = dtColumnas.NewRow();
            rowRegistro["IdRegistro"] = intIdRegistro["IdRegistro"].ToString();

            foreach (DataRowView row in dvImportacion)
            {
                foreach (DataRowView columna in dvEstructura)
                {
                    if (columna["ParametroDetalle"].ToString() == row["Campo"].ToString())
                    {
                        strTexto = string.Empty;
                        if (columna["ValorTexto2"].ToString() == "F")
                        {
                            if (row["Fecha"] != System.DBNull.Value)
                                strTexto = ((DateTime)row["Fecha"]).ToShortDateString();
                        }
                        else
                            strTexto = row["Texto"].ToString();

                        if (columna["ValorTexto6"].ToString() == "K")
                            rowRegistro[columna["ParametroDetalle"].ToString()] = strTexto;
                        else
                            rowRegistro[columna["ParametroDetalle"].ToString()] = string.Format("{0}|{1}", row["Valor"].ToString(), strTexto);
                        break;
                    }
                }
                rowRegistro["FilasXPagina"] = row["FilasXPagina"];
                rowRegistro["TotalFilas"] = row["TotalFilas"];
            }
            dtColumnas.Rows.Add(rowRegistro);
        }
        return dtColumnas;
    }

    private void ActualizarImportacion()
    {
        DataView dvEstructura = ListarParametroDetalle(Constantes.IDAPLICACION_SYSTEM, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_IMPORTACION).DefaultView;
        dvEstructura.Sort = "ValorNumero ASC";

        WCImportacion.BEImportacion beCompania = new WCImportacion.BEImportacion();
        List<WCImportacion.BEImportacion> lstImportacion = new List<WCImportacion.BEImportacion>();

        WCImportacion.BEImportacion beImportacion = null;

        Control txtControl = null;
        Control ddlControl = null;

        foreach (GridViewRow row in grvImportacion.Rows)
        {
            foreach (DataRowView item in dvEstructura)
            {
                //Inicializa valores
                txtControl = null;
                ddlControl = null;

                beImportacion = new WCImportacion.BEImportacion();
                //Obtiene el valor y el texto
                if (item["ValorTexto1"].ToString() == "T")
                {
                    txtControl = row.FindControl(string.Format("txt{0}", item["ParametroDetalle"].ToString()));
                    if (txtControl != null)
                    {
                        if (!string.IsNullOrEmpty(((TextBox)txtControl).Text))
                        {
                            if (item["ValorTexto2"].ToString() == "F")
                                beImportacion.Fecha = DateTime.Parse(((TextBox)txtControl).Text);
                            else
                                beImportacion.Texto = ((TextBox)txtControl).Text;
                        }
                    }

                }
                else if (item["ValorTexto1"].ToString() == "D")
                {
                    ddlControl = row.FindControl(string.Format("ddl{0}", item["ParametroDetalle"].ToString()));
                    if (ddlControl != null)
                    {
                        if (((DropDownList)ddlControl).SelectedValue != "--")
                        {
                            beImportacion.Valor = ((DropDownList)ddlControl).SelectedItem.Value;
                            beImportacion.Texto = ((DropDownList)ddlControl).SelectedItem.Text;
                        }
                    }
                }

                //En caso de no encontrar ningun control se evalua el siguiente registro
                if (txtControl == null && ddlControl == null)
                {
                }
                else
                {
                    beImportacion.IdRegistro = int.Parse(grvImportacion.DataKeys[row.RowIndex]["IdRegistro"].ToString());
                    beImportacion.Campo = item["ParametroDetalle"].ToString();
                    beImportacion.Estado = Constantes.ESTADO_ACTIVO;
                    beImportacion.UsuarioCreacion = UsuarioSistema.CodigoUsuario;
                    lstImportacion.Add(beImportacion);
                }
            }
        }

        beCompania.Importaciones = lstImportacion.ToArray();
        ActualizarImportacion(beCompania);
    }

    private void InsertarTabla()
    {
        WCParametroDetalle.BEParametroDetalle beParametroDetalle = ObtenerParametroDetalle(Constantes.IDCOMPANIA_DEFAULT, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_IMPORTACION, ddlTablas.SelectedValue);

        WCImportacion.BEImportacion beCompania = new WCImportacion.BEImportacion();
        beCompania.Importaciones = new List<WCImportacion.BEImportacion>().ToArray();
        beCompania.Sinonimos = new List<WCImportacion.BEImportacionSinonimo>().ToArray();
        beCompania.ParametroDetalle = beParametroDetalle.ValorTexto3;

        if (chkRelacionar.Checked)
        {
            RadioButton rbSeleccion = null;
            ListViewDataItem itemSeleccion = null;

            foreach (ListViewDataItem item in lvMaestro.Items)
            {
                rbSeleccion = (RadioButton)item.FindControl("chkSeleccion");
                if (rbSeleccion.Checked)
                {
                    itemSeleccion = item;
                    break;
                }
            }

            if (itemSeleccion != null)
            {
                List<WCImportacion.BEImportacionSinonimo> lstSinonimo = new List<WCImportacion.BEImportacionSinonimo>();
                CheckBox chkSeleccion = null;
                Label lblDescripcion = null;
                foreach (ListViewDataItem item in lvTablas.Items)
                {
                    chkSeleccion = (CheckBox)item.FindControl("chkSeleccion");
                    if (chkSeleccion.Checked)
                    {
                        lblDescripcion = (Label)item.FindControl("lblDescripcion");
                        lstSinonimo.Add(new WCImportacion.BEImportacionSinonimo()
                        {
                            ImportacionTabla = beParametroDetalle.ValorTexto3,
                            Texto = lblDescripcion.Text,
                            Valor = lvMaestro.DataKeys[itemSeleccion.DataItemIndex]["Id"].ToString(),
                            Descripcion = lblDescripcion.Text,
                            Estado = Constantes.ESTADO_ACTIVO,
                            UsuarioCreacion = UsuarioSistema.CodigoUsuario
                        });
                    }
                }
                beCompania.Sinonimos = lstSinonimo.ToArray();
            }
        }
        else
        {
            List<WCImportacion.BEImportacion> lstImportacion = new List<WCImportacion.BEImportacion>();

            CheckBox chkSeleccion = null;
            Label lblDescripcion = null;
            foreach (ListViewDataItem item in lvTablas.Items)
            {
                chkSeleccion = (CheckBox)item.FindControl("chkSeleccion");
                if (chkSeleccion.Checked)
                {
                    lblDescripcion = (Label)item.FindControl("lblDescripcion");
                    lstImportacion.Add(new WCImportacion.BEImportacion()
                    {
                        Parametro = Constantes.PARAMETRO_IMPORTACION,
                        ParametroDetalle = ddlTablas.SelectedValue,
                        Descripcion = lblDescripcion.Text,
                        Estado = Constantes.ESTADO_ACTIVO,
                        UsuarioCreacion = UsuarioSistema.CodigoUsuario
                    });
                }
            }
            beCompania.Importaciones = lstImportacion.ToArray();
        }
        InsertarTabla(beCompania);
    }

    private void InsertarAImportar()
    {
        WCImportacion.BEImportacion beImportacionRegistro = new WCImportacion.BEImportacion();
        beImportacionRegistro.UsuarioCreacion = UsuarioSistema.CodigoUsuario;
        ImportarDatos(beImportacionRegistro);
    }

    private void InsertarAImportarRegistro()
    {
        List<WCImportacion.BEImportacion> lstImportacion = new List<WCImportacion.BEImportacion>();
        WCImportacion.BEImportacion beImportacion = null;
        foreach (KeyValuePair<int, bool> KeyAImportar in ListaAImportar)
        {
            beImportacion = new WCImportacion.BEImportacion();
            beImportacion.IdRegistro = KeyAImportar.Key;
            beImportacion.UsuarioCreacion = UsuarioSistema.CodigoUsuario;
            lstImportacion.Add(beImportacion);
        }

        WCImportacion.BEImportacion beImportacionRegistro = new WCImportacion.BEImportacion();
        beImportacionRegistro.Importaciones = lstImportacion.ToArray();
        ImportarDatos_Registro(beImportacionRegistro);
    }

    private void EstablecerSeleccionListaAImportar()
    {
        bool blnSeleccion = false;
        int intKey = 0;
        string strNivel = string.Empty;
        string strTipoEvaluacion = string.Empty;
        CheckBox chkSeleccion = null;
        for (int i = 0; i < grvAImportar.Rows.Count; i++)
        {
            intKey = int.Parse(grvAImportar.DataKeys[i]["IdRegistro"].ToString());
            chkSeleccion = (CheckBox)grvAImportar.Rows[i].FindControl("chkSeleccionRegistro");

            if (chkSeleccion.Checked != blnSeleccion)
            {
                if (ListaAImportar.ContainsKey(intKey))
                    ListaAImportar[intKey] = chkSeleccion.Checked;
                else
                    ListaAImportar.Add(intKey, chkSeleccion.Checked);
            }
            else
            {
                if (ListaAImportar.ContainsKey(intKey))
                    ListaAImportar.Remove(intKey);
            }
        }
    }

    private void JavascriptRefrescarGrillas()
    {
        grvImportacion.DataSource = null;
        grvImportacion.DataBind();
        grvAImportar.DataSource = null;
        grvAImportar.DataBind();
        ScriptManager.RegisterStartupScript(this, this.GetType(), "fnRefrescarGrilla", "fnRefrescarGrilla();", true);
    }

    private bool EnviarParametros()
    {
        int intIdProceso = 0;
        int.TryParse(hfIdProceso.Value, out intIdProceso);
        string strParametro = string.Empty;
        WCProceso.BEProceso be = new WCProceso.BEProceso();
        be.IdProceso = intIdProceso;
        be.Parametro = strParametro;
        be.IdPersona = UsuarioSistema.IdPersona;
        be.UsuarioModificacion = UsuarioSistema.CodigoUsuario;

        be = ActualizarProceso(be);

        if (be.Error == -1)
        {
            Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorEnviarParametros));
            return false;
        }
        return true;
    }

    protected void ProcesarPaquete() //G:Grabar, A:Aplicar
    {
        string strParametro = string.Empty;
        ISCadenaConexion rs = new ISCadenaConexion();
        strParametro = @"/set \package.variables[ai_IdProceso].Value;" + hfIdProceso.Value.ToString();
        EjecutarPaquete(rs.Dts + NOMBRE_PAQUETE, rs.Server, strParametro);
    }

    [System.Web.Services.WebMethod]
    public static bool EliminarImportacion(string pstrValor)
    {
        try
        {
            WCImportacion.BEImportacion beImportacion = new WCImportacion.BEImportacion();
            beImportacion.IdRegistro = int.Parse(pstrValor);
            EliminarRegistro(beImportacion);
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

    #endregion

    #region LLAMDAS A WEBSERVICES

    protected WCPackageIS.BEPackageIS EjecutarPaquete(string pstrNombrePaquete, string pstrNombreServidor, string pstrParametros)
    {
        WCPackageIS.BEPackageIS be = new WCPackageIS.BEPackageIS();
        be.NombrePaquete = pstrNombrePaquete;
        be.NombreServidor = pstrNombreServidor;
        be.Parametros = pstrParametros;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCPackageIS.IWCPackageIS>("BasicHttpBinding_IWCPackageIS"))
        {
            var response = client.ServiceOperation<WCPackageIS.BEPackageIS>(c => c.Ejecutar(be));
            be = response;
        }
        return be;
    }

    protected static WCProceso.BEProceso ActualizarProceso(WCProceso.BEProceso pbe)
    {
        WCProceso.BEProceso be = new WCProceso.BEProceso();
        using (var client = new ServiceClient<WCProceso.IWCProceso>("BasicHttpBinding_IWCProceso"))
        {
            var response = client.ServiceOperation<WCProceso.BEProceso>(c => c.Actualizar(pbe));
            be = response;
        }
        return be;
    }

    protected WCProceso.BEProceso ObtenerProceso(WCProceso.BEProceso pbe)
    {
        WCProceso.BEProceso be = new WCProceso.BEProceso();
        using (var client = new ServiceClient<WCProceso.IWCProceso>("BasicHttpBinding_IWCProceso"))
        {
            var response = client.ServiceOperation<WCProceso.BEProceso>(c => c.Obtener(pbe));
            be = response;
        }
        return be;
    }

    protected WCCompania.BECompania ObtenerCompania(WCCompania.BECompania pbe)
    {
        WCCompania.BECompania be = new WCCompania.BECompania();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCompania.IWCCompania>("BasicHttpBinding_IWCCompania"))
        {
            var response = client.ServiceOperation<WCCompania.BECompania>(
               c => c.Obtener(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    protected DataTable ListarParametro(int pintidCompania, int pintIdAplicacion, string pstrTexto)
    {
        WCParametro.BEParametro be = new WCParametro.BEParametro();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Texto = pstrTexto;
        be.Estado = Constantes.ESTADO_ACTIVO;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametro.IWCParametro>("BasicHttpBinding_IWCParametro"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar_Sel(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    protected WCParametroDetalle.BEParametroDetalle ObtenerParametroDetalle(int pintIdParametro, string pstrParametroDetalle)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.ParametroDetalle = pstrParametroDetalle;
        be.IdParametro = pintIdParametro;
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<WCParametroDetalle.BEParametroDetalle>(c => c.Obtener(be));
            be = response;
        }
        return be;
    }

    protected WCParametroDetalle.BEParametroDetalle ObtenerParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro, string pstrParametroDetalle)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        be.ParametroDetalle = pstrParametroDetalle;
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<WCParametroDetalle.BEParametroDetalle>(c => c.Obtener(be));
            be = response;
        }
        return be;
    }

    protected WCImportacion.BEImportacion InsertarImportacion(WCImportacion.BEImportacion pbe)
    {
        using (var client = new ServiceClient<WCImportacion.IWCImportacion>("BasicHttpBinding_IWCImportacion"))
        {
            var response = client.ServiceOperation<WCImportacion.BEImportacion>(
               c => c.Insertar(pbe)
               );
            ;
            pbe = response;
        }
        return pbe;
    }

    protected WCImportacion.BEImportacion ActualizarImportacion(WCImportacion.BEImportacion pbe)
    {
        using (var client = new ServiceClient<WCImportacion.IWCImportacion>("BasicHttpBinding_IWCImportacion"))
        {
            var response = client.ServiceOperation<WCImportacion.BEImportacion>(
               c => c.Actualizar(pbe)
               );
            ;
            pbe = response;
        }
        return pbe;
    }

    protected WCImportacion.BEImportacion InsertarTabla(WCImportacion.BEImportacion pbe)
    {
        using (var client = new ServiceClient<WCImportacion.IWCImportacion>("BasicHttpBinding_IWCImportacion"))
        {
            var response = client.ServiceOperation<WCImportacion.BEImportacion>(
               c => c.InsertarTabla(pbe)
               );
            ;
            pbe = response;
        }
        return pbe;
    }

    protected WCImportacion.BEImportacion ImportarDatos(WCImportacion.BEImportacion pbe)
    {
        using (var client = new ServiceClient<WCImportacion.IWCImportacion>("BasicHttpBinding_IWCImportacion"))
        {
            var response = client.ServiceOperation<WCImportacion.BEImportacion>(
               c => c.Importar(pbe)
               );
            ;
            pbe = response;
        }
        return pbe;
    }

    protected WCImportacion.BEImportacion ImportarDatos_Registro(WCImportacion.BEImportacion pbe)
    {
        using (var client = new ServiceClient<WCImportacion.IWCImportacion>("BasicHttpBinding_IWCImportacion"))
        {
            var response = client.ServiceOperation<WCImportacion.BEImportacion>(
               c => c.Importar_Registro(pbe)
               );
            ;
            pbe = response;
        }
        return pbe;
    }

    protected static WCImportacion.BEImportacion EliminarRegistro(WCImportacion.BEImportacion pbe)
    {
        using (var client = new ServiceClient<WCImportacion.IWCImportacion>("BasicHttpBinding_IWCImportacion"))
        {
            var response = client.ServiceOperation<WCImportacion.BEImportacion>(
               c => c.Eliminar(pbe)
               );
            ;
            pbe = response;
        }
        return pbe;
    }

    protected DataTable ListarImportacionTabla(string pstrParametro, string pstrParametroDetalle)
    {
        DataTable dt = new DataTable();
        WCImportacion.BEImportacion be = new WCImportacion.BEImportacion();
        be.Parametro = pstrParametro;
        be.ParametroDetalle = pstrParametroDetalle;
        using (var client = new ServiceClient<WCImportacion.IWCImportacion>("BasicHttpBinding_IWCImportacion"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.ListarTabla(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarImportacionMaestro(string pstrParametro, string pstrParametroDetalle)
    {
        DataTable dt = new DataTable();
        WCImportacion.BEImportacion be = new WCImportacion.BEImportacion();
        //be.IdCompania = pintIdCompania;
        be.Parametro = pstrParametro;
        be.ParametroDetalle = pstrParametroDetalle;
        using (var client = new ServiceClient<WCImportacion.IWCImportacion>("BasicHttpBinding_IWCImportacion"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.ListarMaestro(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarImportacionCampo(string pstrParametro, string pstrParametroDetalle)
    {
        DataTable dt = new DataTable();
        WCImportacion.BEImportacion be = new WCImportacion.BEImportacion();
        //be.IdCompania = pintIdCompania;
        be.Parametro = pstrParametro;
        be.ParametroDetalle = pstrParametroDetalle;
        using (var client = new ServiceClient<WCImportacion.IWCImportacion>("BasicHttpBinding_IWCImportacion"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.ListarCampo(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarImportacion(WCImportacion.BEImportacion pbe)
    {
        WCImportacion.BEImportacion be = new WCImportacion.BEImportacion();
        be.Campo = pbe.Campo;
        be.Valor = pbe.Valor;
        be.Texto = pbe.Texto;
        be.Fecha = pbe.Fecha;
        be.Pagina = pbe.Pagina;
        be.Estado = Constantes.ESTADO_ACTIVO;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCImportacion.IWCImportacion>("BasicHttpBinding_IWCImportacion"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.Listar(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }

    #endregion

    #region TEMPLATE

    public class GridViewLabelListItemTemplate : ITemplate
    {
        private string strColumnName;
        private string strDataValueField;
        private string strDataTextField;
        private DataTable dtDataSource;
        private bool blnEnabled;

        public GridViewLabelListItemTemplate(string pstrColumnName, string pstrDataValueField, string pstrDataTextField, DataTable pdtDataSource, bool pblnEnabled)
        {
            this.strColumnName = pstrColumnName;
            this.strDataTextField = pstrDataTextField;
            this.strDataValueField = pstrDataValueField;
            this.dtDataSource = pdtDataSource;
            this.blnEnabled = pblnEnabled;
        }

        public void InstantiateIn(System.Web.UI.Control container)
        {
            Label lbl = new Label();
            lbl.ID = string.Format("lbl{0}", strColumnName);
            lbl.DataBinding += new EventHandler(lbl_DataBinding);
            container.Controls.Add(lbl);
        }

        void lbl_DataBinding(object sender, EventArgs e)
        {
            Label lbl = (Label)sender;
            GridViewRow row = (GridViewRow)lbl.NamingContainer;

            bool blnDato = false;
            DataRow[] drRow = null;

            if (this.dtDataSource != null)
            {
                string[] strValor = DataBinder.Eval(row.DataItem, strColumnName).ToString().Split('|');
                try
                {
                    drRow = dtDataSource.Select(string.Format("{0} = '{1}'", this.strDataValueField, strValor[0]));
                    blnDato = true;
                }
                catch (Exception) { }
                finally
                {
                    if (drRow != null)
                        blnDato = (drRow.Length > 0);
                }
                if (blnDato)
                {
                    lbl.Text = drRow[0][this.strDataTextField].ToString();
                }
                else
                {
                    if (strValor.Length > 1)
                        lbl.Text = strValor[1];
                    lbl.Attributes["style"] = "color: red;";
                    if (string.IsNullOrEmpty(lbl.Text))
                    {
                        lbl.Text = "--";
                        ((TableCell)lbl.Parent).HorizontalAlign = HorizontalAlign.Center;
                    }
                }
            }
        }
    }

    public class GridViewDropDownListItemTemplate : ITemplate
    {
        private string strColumnName;
        private string strDataValueField;
        private string strDataTextField;
        private DataTable dtDataSource;
        private bool blnEnabled;

        public GridViewDropDownListItemTemplate(string pstrColumnName, string pstrDataValueField, string pstrDataTextField, DataTable pdtDataSource, bool pblnEnabled)
        {
            this.strColumnName = pstrColumnName;
            this.strDataTextField = pstrDataTextField;
            this.strDataValueField = pstrDataValueField;
            this.dtDataSource = pdtDataSource;
            this.blnEnabled = pblnEnabled;
        }

        public void InstantiateIn(System.Web.UI.Control container)
        {

            DropDownList ddl = new DropDownList();
            ddl.EnableViewState = false;
            ddl.ID = string.Format("ddl{0}", strColumnName);
            ddl.CssClass = "select";
            ddl.DataBound += new EventHandler(ddl_DataBound);
            if (dtDataSource != null)
            {
                ddl.DataSource = dtDataSource;
                ddl.DataTextField = strDataTextField;
                ddl.DataValueField = strDataValueField;
            }
            ddl.Enabled = blnEnabled;
            //ddl.Width = Unit.Percentage(100);
            container.Controls.Add(ddl);

            //RequiredFieldValidator rfvDdl = new RequiredFieldValidator();
            //rfvDdl.ID = string.Format("rfv{0}", strColumnName);
            //rfvDdl.ControlToValidate = ddl.ID;
            //rfvDdl.Text = "*";
            //container.Controls.Add(rfvDdl);

            //HtmlTable tbl = new HtmlTable();
            //tbl.Attributes["class"] = "acciones";
            //container.Controls.Add(tbl);

            //HtmlTableRow tblRow = new HtmlTableRow();
            //tbl.Rows.Add(tblRow);

            //HtmlTableCell tblCelda = null;
            //tblCelda = new HtmlTableCell();
            //tblCelda.Controls.Add(ddl);
            //tblRow.Cells.Add(tblCelda);

            //tblCelda = new HtmlTableCell();
            //tblCelda.Controls.Add(rfvDdl);
            //tblRow.Cells.Add(tblCelda);

        }

        void ddl_DataBound(object sender, EventArgs e)
        {
            DropDownList ddl = (DropDownList)sender;
            GridViewRow row = (GridViewRow)ddl.NamingContainer;
            ListItem LItem = null;

            if (this.dtDataSource != null)
            {
                //if (DataBinder.Eval(row.DataItem, strColumnName) != DBNull.Value)
                //{
                string[] strValor = DataBinder.Eval(row.DataItem, strColumnName).ToString().Split('|');
                if (strValor.Length > 1)
                {
                    if (!string.IsNullOrEmpty(strValor[1]))
                    {
                        //Si tiene descripcion, se agrega un item con la descripcion
                        if (ddl.Items.FindByText(strValor[1]) == null)
                        {
                            ddl.Items.Insert(0, new ListItem(strValor[1], string.Empty));
                            LItem = ddl.Items.FindByValue(strValor[0]);
                            ddl.Items[0].Attributes["style"] = "color: red;";

                        }
                        else
                        {
                            LItem = ddl.Items.FindByText(strValor[1].Trim());
                            if (LItem == null && !string.IsNullOrEmpty(strValor[0]))
                                LItem = ddl.Items.FindByValue(strValor[0].Trim());
                        }
                        if (LItem != null)
                            LItem.Selected = true;
                    }
                }
                ddl.Items.Insert(0, new ListItem() { Value = "--", Text = string.Format("--{0}--", Resources.resDiccionario.Seleccione) });
                ddl.Items[0].Attributes["style"] = "color: red;";
                //    else
                //        ddl.Items.Insert(0, new ListItem() { Value = "", Text = string.Format("--{0}--", Resources.resDiccionario.Seleccione) });
                //}
                //else
                //    ddl.Items.Insert(0, new ListItem() { Value = "", Text = string.Format("--{0}--", Resources.resDiccionario.Seleccione) });

                if (ddl.SelectedValue == "--" || string.IsNullOrEmpty(ddl.SelectedValue))
                    ddl.Attributes["style"] = "color: red;";

                for (int i = 0; i < ddl.Items.Count; i++)
                {
                    ddl.Items[i].Attributes.Add("onclick", "setStyle(this);");
                }
                // }
            }
        }
    }

    public class GridViewTextBoxItemTemplate : ITemplate
    {
        private string strColumnName;
        private string strTipoDato;
        private bool blnReadOnly;

        public GridViewTextBoxItemTemplate(string pstrColumnName, string pstrTipoDato, bool blnReadOnly)
        {
            this.strColumnName = pstrColumnName;
            this.strTipoDato = pstrTipoDato;
            this.blnReadOnly = blnReadOnly;
        }

        public void InstantiateIn(System.Web.UI.Control container)
        {
            TextBox txt = new TextBox();
            txt.EnableViewState = false;
            txt.DataBinding += new EventHandler(txt_DataBinding);
            txt.ID = string.Format("txt{0}", strColumnName);

            //txt.Width = Unit.Percentage(100);

            if (strTipoDato == "N")
            {
                txt.Style[HtmlTextWriterStyle.TextAlign] = "right";
                txt.Attributes.Add("onkeyup", "javascript:return fnIngresoNumeroDecimales(this,2,false);");
            }
            else if (strTipoDato == "F")
            {
                txt.CssClass = "formatofecha";
            }
            txt.ReadOnly = blnReadOnly;
            container.Controls.Add(txt);

            //RequiredFieldValidator rfvTxt = new RequiredFieldValidator();
            //rfvTxt.ID = string.Format("rfv{0}", strColumnName);
            //rfvTxt.ControlToValidate = txt.ID;
            //rfvTxt.Text = "*";
            //container.Controls.Add(rfvTxt);

        }

        void txt_DataBinding(object sender, EventArgs e)
        {
            TextBox txt = (TextBox)sender;
            GridViewRow row = (GridViewRow)txt.NamingContainer;
            if (DataBinder.Eval(row.DataItem, strColumnName) != DBNull.Value)
            {
                string strValor = DataBinder.Eval(row.DataItem, strColumnName).ToString().Split('|')[1];

                if (strTipoDato == "N")
                {
                    if (!string.IsNullOrEmpty(strValor))
                        txt.Text = decimal.Parse(strValor).ToString("#,###.##");
                }
                else
                    txt.Text = strValor;

            }
        }
    }

    public class GridViewLabelItemTemplate : ITemplate
    {
        private string strColumnName;
        private string strTipoDato;
        private bool blnReadOnly;

        public GridViewLabelItemTemplate(string pstrColumnName, string pstrTipoDato, bool blnReadOnly)
        {
            this.strColumnName = pstrColumnName;
            this.strTipoDato = pstrTipoDato;
            this.blnReadOnly = blnReadOnly;
        }

        public void InstantiateIn(System.Web.UI.Control container)
        {
            Label lbl = new Label();
            lbl.DataBinding += new EventHandler(txt_DataBinding);
            lbl.ID = string.Format("lbl{0}", strColumnName);
            container.Controls.Add(lbl);
        }

        void txt_DataBinding(object sender, EventArgs e)
        {
            Label lbl = (Label)sender;
            GridViewRow row = (GridViewRow)lbl.NamingContainer;
            if (DataBinder.Eval(row.DataItem, strColumnName) != DBNull.Value)
            {
                string strValor = DataBinder.Eval(row.DataItem, strColumnName).ToString().Split('|')[1];

                if (strTipoDato == "N")
                {
                    if (!string.IsNullOrEmpty(strValor))
                        lbl.Text = decimal.Parse(strValor).ToString("#,###.##");
                }
                else
                    lbl.Text = strValor;
            }
        }
    }

    public class GridViewCheckBoxItemTemplate : ITemplate
    {
        private string strColumnName;
        private bool blnReadOnly;

        public GridViewCheckBoxItemTemplate(string pstrColumnName, bool blnReadOnly)
        {
            this.strColumnName = pstrColumnName;
            this.blnReadOnly = blnReadOnly;
        }

        public void InstantiateIn(System.Web.UI.Control container)
        {
            CheckBox chk = new CheckBox();
            chk.DataBinding += new EventHandler(chk_DataBinding);
            chk.ID = string.Format("chk{0}", strColumnName);
            container.Controls.Add(chk);
        }

        void chk_DataBinding(object sender, EventArgs e)
        {
            CheckBox chk = (CheckBox)sender;
            GridViewRow row = (GridViewRow)chk.NamingContainer;
            chk.Checked = (bool)(DataBinder.Eval(row.DataItem, strColumnName));

        }
    }

    public class GridViewImageButtonItemTemplate : ITemplate
    {
        private string strColumnName;
        private string strImageUrl;
        private string strTooltip;
        private bool blnReadOnly;

        public GridViewImageButtonItemTemplate(string pstrColumnName, string pstrImageUrl, string pstrToolTip, bool blnReadOnly)
        {
            this.strColumnName = pstrColumnName;
            this.strImageUrl = pstrImageUrl;
            this.blnReadOnly = blnReadOnly;
            this.strTooltip = pstrToolTip;
        }

        public void InstantiateIn(System.Web.UI.Control container)
        {
            ImageButton ibt = new ImageButton();
            ibt.ImageUrl = this.strImageUrl;
            ibt.DataBinding += new EventHandler(ibt_DataBinding);
            ibt.ID = string.Format("ibt{0}", strColumnName);
            ibt.ToolTip = this.strTooltip;
            container.Controls.Add(ibt);
        }

        void ibt_DataBinding(object sender, EventArgs e)
        {
            ImageButton ibt = (ImageButton)sender;
            GridViewRow row = (GridViewRow)ibt.NamingContainer;
            row.ClientIDMode = ClientIDMode.AutoID;

            string strValor = DataBinder.Eval(row.DataItem, strColumnName).ToString();
            row.ID = string.Format("grv_tr{0}", strValor);
            ibt.OnClientClick = string.Format("javascript:return EliminarImportacion('{0}','{1}');", row.ClientID, strValor);

        }
    }

    #endregion

}